package com.sxt.pro.controller;


import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sxt.pro.Ny_data.xin.WebSocketService;
import com.sxt.pro.pojo.InMessage;
import com.sxt.pro.pojo.Product;
import com.sxt.pro.pojo.ProductType;
import com.sxt.pro.service.ProductService;
import com.sxt.pro.service.ProductTypeService;
import com.sxt.pro.vo.ProductVo;
import com.sxt.sys.common.AppFileUtils;
import com.sxt.sys.common.Constast;
import com.sxt.sys.common.DataGridView;
import com.sxt.sys.common.ResultObj;
import com.sxt.sys.common.WebUtils;


/**  

* @Description: 产品控制层

* @author xinxiaokang  

* @date 2020年8月24日 下午5:09:11

*/
@RestController
@RequestMapping("/product")
public class ProductController {
	
	@Autowired
	private ProductService productService;
	//产品类型
	@Autowired
	private ProductTypeService productTypeService;
	//mq消息发送
	@Autowired
	RabbitTemplate rabbitTemplate;
	//websocket消息发送
	@Autowired
	WebSocketService webSocketService;
	
	/**
	 * 查询产品及分页列表
	 * @param ProductVo
	 * @return
	 */
	@RequestMapping("/loadAllProduct")
	public DataGridView loadAllProduct(ProductVo productVo)
	{
		 //存入网点编号和用户名放入session中
		 int banknbr = (int) WebUtils.getSession().getAttribute("banknbr");
		 productVo.setBanknbr(banknbr);
		//初始化 当前页、每页显示条数
		IPage<Product> page = new Page<>(productVo.getPage(), productVo.getLimit());
		//封装对象查询条件
		QueryWrapper<Product> queryWrapper = new QueryWrapper<Product>();
		//筛选条件：网点编号
	    queryWrapper.eq(productVo.getBanknbr()!=null&&productVo.getBanknbr()!=0,"banknbr",productVo.getBanknbr());
		//筛选条件:产品名称
		queryWrapper.like(StringUtils.isNotBlank(productVo.getProductname()), "productname", productVo.getProductname());
		//筛选条件:设备编号
		queryWrapper.eq(productVo.getDevicenbr()!=null&&productVo.getDevicenbr()!=0, "devicenbr", productVo.getDevicenbr());
		//筛选条件：产品类型
		queryWrapper.eq(productVo.getProducttype()!=null&&productVo.getProducttype()!=0,"producttype",productVo.getProducttype());
		
		//获取分页数据
		this.productService.page(page, queryWrapper);
		//产品类型循环赋值
		List<Product> records = page.getRecords();
		for (Product product : records) {
			ProductType productType = this.productTypeService.getById(product.getProducttype());
			if(null!=productType) {
				product.setProducttypename(productType.getProducttypename());
			}
		}
		return new DataGridView(page.getTotal(), records);
	}
	
	/**
	 * 添加产品
	 * @param ProductVo
	 * @return
	 */
	@RequestMapping("addProduct")
	public ResultObj addProduct(ProductVo productVo) 
	{
		//添加时，网点默认
		int banknbr = (int) WebUtils.getSession().getAttribute("banknbr");
		int available = 0;  //默认未审批
		 productVo.setBanknbr(banknbr);
		 productVo.setAvailable(available);
		try {
			if(productVo.getProductbankqrcode()!=null&&productVo.getProductbankqrcode().endsWith("_temp")) {
				//图片名称
				String newName= AppFileUtils.renameFile(productVo.getProductbankqrcode());
				productVo.setProductbankqrcode(newName);
			}
			if(productVo.getProductwcqrcode()!=null&&productVo.getProductwcqrcode().endsWith("_temp")) {
				//图片名称
//				String newName=AppFileUtils.renameFile(productVo.getProductwcqrcode());
				String newName=AppFileUtils.renameFile(productVo.getProductwcqrcode());
				productVo.setProductwcqrcode(newName);
			}
			this.productService.save(productVo);
			return ResultObj.ADD_SUCCESS;
		} catch (Exception e) {
			e.printStackTrace();
			return ResultObj.ADD_ERROR;
		}
	}

	/**
	 * 修改产品
	 * @param productVo
	 * @return
	 */
	@RequestMapping("updateProduct")
	public ResultObj updateProduct(ProductVo productVo) 
	{
		try {
			//修改掌中银行图片
			if(!(productVo.getProductbankqrcode()!=null&&productVo.getProductbankqrcode().equals(Constast.IMAGES_DEFAULTGOODSIMG_PNG))) {
				if(productVo.getProductbankqrcode().endsWith("_temp")) {
//					String newName=AppFileUtils.renameFile(productVo.getProductbankqrcode());
					String newName= AppFileUtils.renameFile(productVo.getProductbankqrcode());
					productVo.setProductbankqrcode(newName);
					//删除原先的图片
					String oldPath=this.productService.getById(productVo.getId()).getProductbankqrcode();
//					AppFileUtils.removeFileByPath(oldPath);
					if (!(oldPath.equals(Constast.IMAGES_DEFAULTGOODSIMG_PNG))) {
						AppFileUtils.removeFileByPath(oldPath);
					}
				}
			}
			//修改微信二维码图片
			if(!(productVo.getProductwcqrcode()!=null&&productVo.getProductwcqrcode().equals(Constast.IMAGES_DEFAULTGOODSIMG_PNG))) {
				if(productVo.getProductwcqrcode().endsWith("_temp")) {
					String newName= AppFileUtils.renameFile(productVo.getProductwcqrcode());
					productVo.setProductwcqrcode(newName);
					//删除原先的图片
					String oldPath=this.productService.getById(productVo.getId()).getProductwcqrcode();
					if (!(oldPath.equals(Constast.IMAGES_DEFAULTGOODSIMG_PNG))) {
						AppFileUtils.removeFileByPath(oldPath);
					}
				}
			}
			this.productService.updateById(productVo);
			return ResultObj.UPDATE_SUCCESS;
		} catch (Exception e) {
			e.printStackTrace();
			return ResultObj.UPDATE_ERROR;
		}
	}

	/**
	 * 删除产品
	 * @param id
	 * @param producttypeimage
	 * @return
	 */
	@RequestMapping("deleteProduct")
	public ResultObj deleteProduct(Integer id,String productwcqrcode,String productbankqrcode) {
		try {
			//删除掌中二维码文件
			if (!productwcqrcode.isEmpty() && !productwcqrcode.equals("images/defaultgoodsimg.png")) {
				AppFileUtils.removeFileByPath(productwcqrcode);
			}
			//删除微信二维码文件
			if (!productbankqrcode.isEmpty() && !productbankqrcode.equals("images/defaultgoodsimg.png")) {
				AppFileUtils.removeFileByPath(productbankqrcode);
			}
			this.productService.removeById(id);
			return ResultObj.DELETE_SUCCESS;
		} catch (Exception e) {
			e.printStackTrace();
			return ResultObj.DELETE_ERROR;
		}
	}

	
	/**
	 * 批量审核
	 * @param productVo
	 * @return
	 */
	@RequestMapping("batchUpdateProduct")
	public ResultObj batchUpdateProduct(ProductVo productVo) {
		int available = 1; //已审批标志
		try {
			for (Integer id : productVo.getIds()) {
				this.productService.batchUpdateProductById(available,id);
			}
			return ResultObj.UPDATE_SUCCESS;
		} catch (Exception e) {
			e.printStackTrace();
			return ResultObj.UPDATE_ERROR;
		}
	}
	
	
	/**
	 * 批量取消审核
	 * @param productVo
	 * @return
	 */
	@RequestMapping("batchOffupdateProduct")
	public ResultObj batchOffupdateProduct(ProductVo productVo) {
		int available = 0; //未审批标志
		try {
			for (Integer id : productVo.getIds()) {
				this.productService.batchOffupdateProduct(available,id);
			}
			return ResultObj.UPDATE_SUCCESS;
		} catch (Exception e) {
			e.printStackTrace();
			return ResultObj.UPDATE_ERROR;
		}
	}
	
	/**
	 * 批量发布产品
	 * @param productVo
	 * @return
	 */
	@RequestMapping("batchPublish")
	public ResultObj batchPublish(ProductVo productVo) {
		List<Product> list = new ArrayList<Product>();
		int available = 1; //未审批标志
		try {
			for (Integer id : productVo.getIds()) {
				Product product = productService.getById(id);
				if (product.getAvailable() == available) {
					list.add(product);
				}else{
					return ResultObj.PUBLISH_NO;
				}
			}
			InMessage message = new InMessage();
			message.setContent(list.toString());
			//发布产品消息
			webSocketService.sendTopicMessage(message);
//			rabbitTemplate.convertAndSend(RabbitmqConfig.EXCHANGE_TOPICS_INFORM,"inform.email",list.toString());
			return ResultObj.PUBLISH_SUCCESS;
		} catch (Exception e) {
			e.printStackTrace();
			return ResultObj.PUBLISH_ERROR;
		}
	}
	
	
}
